// 引入路由
import router from '@/router'
// 引入vuex模块
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  const url = to.path
  const token = store.getters.token
  const whiteList = ['/login', '404', '/text']
  // 1 有登录
  // 1.1 去登陆页 => 跳转首页
  if (token && url === '/login') {
    next('/')
  }
  // 1.2 不去登录页 =》 放行
  if (token && url !== '/login') {
    // 在这里获取用户基本资料
    // 获取基本资料前，需要验证是否之前有保存，如果保存了，那么久不需要再次请求数，从而浪费资源
    // 因为我们给profile默认是一个空的对象，如果用空对象转化为布尔值，会让其一致处于true的状态，所以，需要使用，Object.keys(对象)，将其的键值对的键转化为一个数组，判断数组的长度，为0，表示没有数据
    if (Object.keys(store.state.user.profile).length === 0) {
      await store.dispatch('user/getProfile')
      // 这里拿完数据以后，当前用户的menus就存在
      // 可以进行路由筛选（必须是next之前）
      const menus = store.state.user.profile.roles.menus
      // 得到过滤后的数据
      const res = await store.dispatch('permission/filterRouter', menus)
      console.log('路由守卫获取信息', res)
      // 追加路由配置，只需要用到路由自己的封装好的函数，router.addRoutes
      // 这里会造成页面刷新，跳转至404页面的问题，需要将其挪到后面（问题解决）
      router.addRoutes([...res, { path: '*', redirect: '/404', hidden: true }])
      // 页面刷新造成页面空白问题解决
      return next(to.path)
    }
    next()
  }
  // 2 没登陆
  // 2.1 在白名单 =》 放行
  if (!token && whiteList.indexOf(url) !== -1) {
    next()
  }
  // 2.2 不在白名单 =》 跳转登录页
  if (!token && whiteList.indexOf(url) === -1) {
    next('/login')
  }
  // 方法2
  // 检验是否登录
  //   if (store.getters.token) {
  // 已登录
  // 是否去登录页
  //     if (to.path === '/login') {
  // next 如果传入url可以跳转页面
  //       next('/')
  //     } else {
  //       next()
  //     }
  //   } else {
  // 未登录
  // 判断首付在允许非登录用户访问白名单
  //     const whiteList = ['/login', '/404', '/text']
  //     if (whiteList.indexOf(to.path) !== -1) {
  // 在白名单
  //       next()
  //     } else {
  //       next('/login')
  //     }
  //   }
})
